﻿namespace Mp4SubtitleParser;

// make BinaryReader in Big Endian
class BinaryReader2 : BinaryReader
{
    public BinaryReader2(System.IO.Stream stream) : base(stream) { }

    public bool HasMoreData()
    {
        return BaseStream.Position < BaseStream.Length;
    }

    public long GetLength()
    {
        return BaseStream.Length;
    }

    public long GetPosition()
    {
        return BaseStream.Position;
    }

    public override int ReadInt32()
    {
        var data = base.ReadBytes(4);
        if (BitConverter.IsLittleEndian)
            Array.Reverse(data);
        return BitConverter.ToInt32(data, 0);
    }

    public override short ReadInt16()
    {
        var data = base.ReadBytes(2);
        if (BitConverter.IsLittleEndian)
            Array.Reverse(data);
        return BitConverter.ToInt16(data, 0);
    }

    public override long ReadInt64()
    {
        var data = base.ReadBytes(8);
        if (BitConverter.IsLittleEndian)
            Array.Reverse(data);
        return BitConverter.ToInt64(data, 0);
    }

    public override uint ReadUInt32()
    {
        var data = base.ReadBytes(4);
        if (BitConverter.IsLittleEndian)
            Array.Reverse(data);
        return BitConverter.ToUInt32(data, 0);
    }

    public override ulong ReadUInt64()
    {
        var data = base.ReadBytes(8);
        if (BitConverter.IsLittleEndian)
            Array.Reverse(data);
        return BitConverter.ToUInt64(data, 0);
    }
}